package com.kpx.app.utils.uiutils;

import java.util.List;

import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Bundle;

import com.kpx.app.R;
import com.kpx.app.utils.UserInfoUtils;


/**
 * Intent跳转工具类
 *
 * @author CodeApe
 * @version 1.0
 * @Description 用于简化页面跳转搞得重复代码
 * @date 2014年12月31日
 * @Copyright: Copyright (c) 2014 Shenzhen Utoow Technology Co., Ltd. All rights reserved.
 */
public class IntentUtil {

    /**
     * 普通的方式打开一个Activiy
     *
     * @param context
     * @param gotoClass
     * @version 1.0
     * @createTime 2015年12月15日, 上午10:58:25
     * @updateTime 2015年12月15日, 上午10:58:25
     * @createAuthor chencong
     * @updateAuthor
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity_intent(Context context, Class<?> gotoClass, Intent intent) {
        intent.setClass(context, gotoClass);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 普通的方式打开一个Activiy
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:07:13
     * @updateTime 2014年12月31日, 上午7:07:13
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity(Context context, Class<?> gotoClass) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }


    /**
     * 普通的方式打开一个Activiy并携带一个int型变量
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * @param type 携带的变量
     * @param typeName 携带的变量的名称
     * @version 1.0
     * @createTime 2015年3月9日, 上午11:14:46
     * @updateTime 2015年3月9日, 上午11:14:46
     * @createAuthor chencong
     * @updateAuthor chencong
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity(Context context, Class<?> gotoClass, int type, String typeName) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtra(typeName, type);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 普通的方式打开一个Activiy并携带一个String型变量
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * @param type 携带的变量
     * @param typeName 携带的变量的名称
     * @version 1.0
     * @createTime 2015年3月9日, 上午11:14:46
     * @updateTime 2015年3月9日, 上午11:14:46
     * @createAuthor chencong
     * @updateAuthor chencong
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity(Context context, Class<?> gotoClass, String type, String typeName) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtra(typeName, type);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 打开一个Activity并关闭当前页面
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:07:43
     * @updateTime 2014年12月31日, 上午7:07:43
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityToTopAndFinish(Context context, Class<?> gotoClass) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
        ((Activity) context).finish();
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 用单例模式打开一个Activity并关闭当前页面，可携带数据
     *
     * @param context 上下文
     * @param gotoClass 需要跳转的页面
     * @param bundle 携带的数据
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:08:40
     * @updateTime 2014年12月31日, 上午7:08:40
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityToTopAndFinish(Context context, Class<?> gotoClass, Bundle bundle) {
        Intent intent = new Intent();
        intent.putExtras(bundle);
        intent.setClass(context, gotoClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
        ((Activity) context).finish();
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 普通的方式打开一个activity，并携带数据
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * @param bundle 携带的数据
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:05:33
     * @updateTime 2014年12月31日, 上午7:05:33
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity(Context context, Class<?> gotoClass, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtras(bundle);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 普通的方式打开一个activity，并携带数据(intent)
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * 携带的数据
     * @version 1.0
     * @createAuthor cc
     * @updateAuthor cc
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivity(Context context, Class<?> gotoClass, Intent intent) {
        intent.setClass(context, gotoClass);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 用Result的方式跳转到指定页面，不携带数据
     *
     * @param context 上下文
     * @param gotoClass 要跳转的Activity
     * @param requestCode 页面跳转请求码
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:03:59
     * @updateTime 2014年12月31日, 上午7:03:59
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityForResult(Context context, Class<?> gotoClass, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        ((Activity) context).startActivityForResult(intent, requestCode);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 普通的方式打开一个activity，并携带数据(intent)
     *
     * @param context 上下文
     * @param gotoClass 需要打开的Activity
     * 携带的数据
     * @version 1.0
     * @createAuthor cc
     * @updateAuthor cc
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityForResult(Context context, Class<?> gotoClass, Intent intent, int requestCode) {
        intent.setClass(context, gotoClass);
        ((Activity) context).startActivityForResult(intent, requestCode);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 用Result的形式跳转到指定页面，并携带数据
     *
     * @param context 上下文
     * @param gotoClass 要跳转的页面
     * @param bundle 携带的数据
     * @param requestCode 跳转搞到页面的请求码
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:02:25
     * @updateTime 2014年12月31日, 上午7:02:25
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityForResult(Context context, Class<?> gotoClass, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtras(bundle);
        ((Activity) context).startActivityForResult(intent, requestCode);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 用Result的形式跳转到指定页面，并携带数据[问答图片展示使用]
     *
     * @param context 上下文
     * @param gotoClass 要跳转的页面
     * @param bundle 携带的数据
     * @param requestCode 跳转搞到页面的请求码
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:02:25
     * @updateTime 2014年12月31日, 上午7:02:25
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityForResult_Pic(Context context, Class<?> gotoClass, Bundle bundle, int requestCode) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtras(bundle);
        ((Activity) context).startActivityForResult(intent, requestCode);
        // ((Activity) context).overridePendingTransition(R.anim.close_left_out, R.anim.close_left_out);
    }

    /**
     * 跳转至指定activity,并关闭当前activity.
     *
     * @param context 上下文
     * @param gotoClass 需要跳转的Activity界面
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:01:47
     * @updateTime 2014年12月31日, 上午7:01:47
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityAndFinish(Context context, Class<?> gotoClass) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        context.startActivity(intent);
        ((Activity) context).finish();
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 跳转至指定activity,并关闭当前activity.
     *
     * @param context 上下文
     * @param gotoClass 需要跳转的Activity界面
     * @createAuthor cc
     * @updateAuthor cc
     */
    public static void gotoActivityAndFinish(Context context, Class<?> gotoClass, int resultCode) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        context.startActivity(intent);
        ((Activity) context).setResult(resultCode);
        ((Activity) context).finish();
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 携带传递数据跳转至指定activity,并关闭当前activity.
     *
     * @param context 上下文
     * @param gotoClass 需要跳转的页面
     * @param bundle 附带数据
     * @version 1.0
     * @createTime 2014年12月31日, 上午7:00:59
     * @updateTime 2014年12月31日, 上午7:00:59
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityAndFinish(Context context, Class<?> gotoClass, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtras(bundle);
        context.startActivity(intent);
        ((Activity) context).finish();
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 跳转至指定activity,不关闭当前页面
     *
     * @param context 上下文
     * @param gotoClass 需要跳转的界面Activity
     * @version 1.0
     * @createTime 2014年12月31日, 上午6:59:27
     * @updateTime 2014年12月31日, 上午6:59:27
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityToTop(Context context, Class<?> gotoClass) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 携带传递数据跳转至指定activity,不关闭当前activity.
     *
     * @param context 上下文
     * @param gotoClass 跳转的activity
     * @param bundle 附带的数据
     * @version 1.0
     * @createTime 2014年12月31日, 上午6:58:46
     * @updateTime 2014年12月31日, 上午6:58:46
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoActivityToTop(Context context, Class<?> gotoClass, Bundle bundle) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        intent.putExtras(bundle);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    /**
     * 跳转到发送短信界面
     *
     * @param context 上下文
     * @param phoneNum 手机号码
     * @param content 短信内容
     * @version 1.0
     * @createTime 2013-12-19,上午10:12:04
     * @updateTime 2013-12-19,上午10:12:04
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void gotoSendMsmActivity(Context context, String phoneNum, String content) {
        Uri uri = Uri.parse("smsto:" + phoneNum);
        Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
        intent.putExtra("sms_body", content);
        context.startActivity(intent);
    }

    /**
     * 关闭某个activity
     *
     * @param activity 需要关闭的activity对象
     * @version 1.0
     * @createTime 2014年12月31日, 上午6:57:56
     * @updateTime 2014年12月31日, 上午6:57:56
     * @createAuthor CodeApe
     * @updateAuthor CodeApe
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static void finish(Activity activity) {
        activity.finish();
        activity.overridePendingTransition(R.anim.open_left_in, R.anim.close_right_out);
    }

    /**
     * Android5.0将隐式启动转换为显示启动
     *
     * @param context
     * @param implicitIntent
     * @return
     * @version 1.0
     * @createTime 2015年8月3日, 上午10:28:46
     * @updateTime 2015年8月3日, 上午10:28:46
     * @createAuthor yanzhongzhong
     * @updateAuthor yanzhongzhong
     * @updateInfo (此处输入修改内容, 若无修改可不写.)
     */
    public static Intent getExplicitIntent(Context context, Intent implicitIntent) {
        // Retrieve all services that can match the given intent
        PackageManager pm = context.getPackageManager();
        List<ResolveInfo> resolveInfo = pm.queryIntentServices(implicitIntent, 0);
        // Make sure only one match was found
        if (resolveInfo == null || resolveInfo.size() != 1) {
            return null;
        }
        // Get component info and create ComponentName
        ResolveInfo serviceInfo = resolveInfo.get(0);
        String packageName = serviceInfo.serviceInfo.packageName;
        String className = serviceInfo.serviceInfo.name;
        ComponentName component = new ComponentName(packageName, className);
        // Create a new intent. Use the old one for extras and such reuse
        Intent explicitIntent = new Intent(implicitIntent);
        // Set the component to be explicit
        explicitIntent.setComponent(component);
        return explicitIntent;
    }

    /**
     * 打开一个Activiy，可携带数据，带有区分标志
     *
     * @param context
     * @param gotoClass
     * @param bundle
     * @param flag 区分标志
     */
    public static void gotoActivity(Context context, Class<?> gotoClass, Bundle bundle, String flag) {
        Intent intent = new Intent();
        intent.setClass(context, gotoClass);
        intent.putExtras(bundle);
        intent.putExtra("flag", flag);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }

    public static void gotoActivityForCheckLogin(Context context,Class<?> gotoClass) {
        if(!UserInfoUtils.isUserLogin()){
            UserInfoUtils.showLoginDialog(context,"请先进行登录",1);
            return;
        }
        Intent intent = new Intent();
        intent.setClass(context,gotoClass);
        context.startActivity(intent);
        ((Activity) context).overridePendingTransition(R.anim.open_right_in, R.anim.close_left_out);
    }
}
